package webservices;

import entidades.Empresa;
import entidades.Solicitud;
import entidades.Taxi;
import entidades.Usuario;
import excepciones.FachadaException;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
import negocio.FachadaNegocio;
import negocio.FachadaNegocioRemote;

/**
 *
 * @author Juan Leal
 */
@WebService(serviceName = "WebServiceNegocio")
@Stateless()
public class WebServiceNegocio {
    @EJB
    private FachadaNegocioRemote ejbRef;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")
    
    @WebMethod(operationName = "agregarEmpresa")
    public boolean agregarEmpresa(@WebParam(name = "empresa") Empresa empresa) throws FachadaException {
        ejbRef = new FachadaNegocio();
        boolean res = ejbRef.agregarEmpresa(empresa);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "editarEmpresa")
    public boolean editarEmpresa(@WebParam(name = "empresa") Empresa empresa) throws FachadaException {
        ejbRef = new FachadaNegocio();
        boolean res = ejbRef.editarEmpresa(empresa);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "eliminarEmpresa")
    public boolean eliminarEmpresa(@WebParam(name = "empresa") Empresa empresa) throws FachadaException {
        ejbRef = new FachadaNegocio();
        boolean res = ejbRef.eliminarEmpresa(empresa);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "buscarmpresa")
    public Empresa buscarmpresa(@WebParam(name = "empresa") Empresa empresa) throws FachadaException {
        ejbRef = new FachadaNegocio();
        Empresa res = ejbRef.buscarmpresa(empresa);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "buscarEmpresas")
    public List<Empresa> buscarEmpresas(@WebParam(name = "usuario") Usuario usuario) throws FachadaException {
        ejbRef = new FachadaNegocio();
        List<Empresa> res = ejbRef.buscarEmpresas(usuario);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "listarEmpresas")
    public List<Empresa> listarEmpresas() throws FachadaException {
        ejbRef = new FachadaNegocio();
        List<Empresa> res = ejbRef.listarEmpresas();        
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "agregarTaxi")
    public boolean agregarTaxi(@WebParam(name = "taxi") Taxi taxi) throws FachadaException {
        ejbRef = new FachadaNegocio();
        boolean res = ejbRef.agregarTaxi(taxi);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "editarTaxi")
    public boolean editarTaxi(@WebParam(name = "taxi") Taxi taxi) throws FachadaException {
        ejbRef = new FachadaNegocio();
        boolean res = ejbRef.editarTaxi(taxi);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "eliminarTaxi")
    public boolean eliminarTaxi(@WebParam(name = "taxi") Taxi taxi) throws FachadaException {
        ejbRef = new FachadaNegocio();
        boolean res = ejbRef.eliminarTaxi(taxi);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "buscar")
    public Taxi buscar(@WebParam(name = "taxi") Taxi taxi) throws FachadaException {
        ejbRef = new FachadaNegocio();
        Taxi res = ejbRef.buscar(taxi);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "listarTaxis")
    public List<Taxi> listarTaxis() throws FachadaException {
        ejbRef = new FachadaNegocio();
        List<Taxi> res = ejbRef.listarTaxis();
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "listarTaxis_1")
    @RequestWrapper(className = "listarTaxis_1")
    @ResponseWrapper(className = "listarTaxis_1Response")
    public List<Taxi> listarTaxis(@WebParam(name = "empresa") Empresa empresa) throws FachadaException {
        ejbRef = new FachadaNegocio();
        List<Taxi> res = ejbRef.listarTaxis(empresa);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "agregar")
    public boolean agregar(@WebParam(name = "solicitud") Solicitud solicitud) throws FachadaException {
        ejbRef = new FachadaNegocio();
        boolean res = ejbRef.agregar(solicitud);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "editar")
    public boolean editar(@WebParam(name = "solicitud") Solicitud solicitud) throws FachadaException {
        ejbRef = new FachadaNegocio();
        boolean res = ejbRef.editar(solicitud);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "elimina")
    public boolean elimina(@WebParam(name = "solicitud") Solicitud solicitud) throws FachadaException {
        ejbRef = new FachadaNegocio();
        boolean res = ejbRef.elimina(solicitud);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "buscar_1")
    @RequestWrapper(className = "buscar_1")
    @ResponseWrapper(className = "buscar_1Response")
    public Solicitud buscar(@WebParam(name = "solicitud") Solicitud solicitud) throws FachadaException {
        ejbRef = new FachadaNegocio();
        Solicitud res = ejbRef.buscar(solicitud);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "buscarSolicitud")
    public List<Solicitud> buscarSolicitud(@WebParam(name = "usuario") Usuario usuario) throws FachadaException {
        ejbRef = new FachadaNegocio();
        List<Solicitud> res = ejbRef.buscarSolicitud(usuario);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "listarSolicitudes")
    public List<Solicitud> listarSolicitudes() throws FachadaException {
        ejbRef = new FachadaNegocio();
        List<Solicitud> res = ejbRef.listarSolicitudes();
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "iniciarSesion")
    public String iniciarSesion(@WebParam(name = "usuario") Usuario usuario) throws FachadaException {
        ejbRef = new FachadaNegocio();
        String res = ejbRef.iniciarSesion(usuario);
        ejbRef = null;
        return res;
    }

    @WebMethod(operationName = "validaSesion")
    public void validaSesion(@WebParam(name = "token") String token, @WebParam(name = "roles") String[] roles) throws FachadaException {
        ejbRef = new FachadaNegocio();
        ejbRef.validaSesion(token, roles);
        ejbRef = null;
    }
    
    @WebMethod(operationName = "buscaUsuario")
    public Usuario buscaUsuario(@WebParam(name = "username") String username) throws FachadaException {
        ejbRef = new FachadaNegocio();
        Usuario res = ejbRef.buscaUsuario(username);
        ejbRef = null;
        return res;
    }
}
